﻿using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;

namespace MvcApplication2.Models
{
    /// <summary>
    /// User è la classe che rappresenta utente.
    /// E' la stessa sia per tester che per developer.
    /// Non creo 2 classi diversi per facilitarmi lo schema.
    ///  --
    /// Per adesso come pagamento unico prevedo dollaro
    /// </summary>
    public class UserProfile
    {
        /// <summary>
        /// Ctor
        /// </summary>
        public UserProfile()
        {
            Languages = new HashSet<Language>();
            Devices = new HashSet<Device>();
            // UserMessages = new HashSet<UserMessage>();
            MessageReaded = new HashSet<UserMessage>();

            UserCurrency = "USD";
        }

        // non bene definita con code first..
        //public ICollection<UserMessage> Messages { get; set;}

        #region common property

        public int UserProfileId { get; set; }

        // La inizializzo con valore del membership provider
        public string DisplayName { get; set; }

        public int TesterExperiencePoint { get; set; }

        /// <summary>
        /// 0: Tester
        /// 1: Developer
        /// 2: Both
        /// </summary>
        public string Type { get; set; }

        public string UserCurrency { get; set; }


        public ICollection<UserMessage> MessagesAllowed { get; set; }
        /// <summary>
        /// Flag che indica se utente è interessato a ricevere richieste di testing
        /// </summary>
        public bool AcceptTestingRequest { get; set; }
        #endregion

        #region tester property
        // Indirizzo sul quale verrà pagato
        public string PayPalMail { get; set; }

        /// <summary>
        /// Lista dei device ( iphone, android, pc, ) sul quale può fare test.
        /// </summary>
        public virtual ICollection<Device> Devices { get; set; }

        // Indica se può fare screencast sul pc , 
        public bool CanPcScreencast { get; set; }

        // Indica se può fare registrazione con webcam, durante utilizzo dispositivo mobile.
        public bool CanRegisterMobileDevice { get; set; }

        // Indica apprositivamente l'abilita con computer.
        public string ComputerSkillLevel { get; set; }

        /// <summary>
        /// Indica le lingue compatibili.
        /// 'ITA', 'ENG', 'FRA',..
        /// </summary>
        public virtual ICollection<Language> Languages { get; set; }

        // lista thread di commenti riguardanti utente
        public Guid MembershipGuid { get; set; }

        #endregion

        #region Developer Property

        public virtual ICollection<Exercise> Exercises { get; set; }

        #endregion


        public ICollection<UserMessage> MessageReaded { get; set; }
    }

    public class Language
    {
        public int LanguageId { get; set; }

        public string Description { get; set; }

        public virtual ICollection<UserProfile> Users { get; set; }
    }

    public class Device
    {
        public int DeviceId { get; set; }

        public string Description { get; set; }

        public string RecordingType { get; set; }

        public virtual ICollection<UserProfile> Users { get; set; }
    }


}

